﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using DataAccessLayer;
using DTO;
using System.Data;

namespace DAL
{
    public class KhachHangDAL
    {
        private DBManager _dbmanager;

        #region Khởi tạo
        public KhachHangDAL()
        {
            string ConnectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, ConnectionInfo);
        }
        #endregion

        #region Tạo Object từ DataReader
        private KhachHangDTO CreateKhachHangFromReader(IDataReader reader)
        {
            KhachHangDTO _khDTO = new KhachHangDTO();

            _khDTO.MaKhachHang = reader["MaKhachHang"].ToString();
            _khDTO.TenKhachHang = reader["TenKhachHang"].ToString();
            _khDTO.GioiTinh = Convert.ToInt32(reader["GioiTinh"]);
            _khDTO.DiaChi = reader["DiaChi"].ToString();
            _khDTO.Email = reader["Email"].ToString();
            _khDTO.CMND = reader["CMND"].ToString();
            _khDTO.DienThoai = reader["DienThoai"].ToString();
            _khDTO.Quyen = Convert.ToInt32(reader["Quyen"]);
            _khDTO.Token = Convert.ToString(reader["Token"]);
            _khDTO.TinhTrang = Convert.ToInt32(reader["TinhTrang"]);

            return _khDTO;
        }
        #endregion

        #region Comment
        //// lay thong tin 1 khach hang tukhoa có thể là makhachhang hoặc tendangnhap
        //public KhachHangDTO getKhachHang(string tukhoa)
        //{
        //    KhachHangDTO khDTO = new KhachHangDTO();
        //    IDataReader reader = null;
        //    try
        //    {
        //        _dbmanager.Open();
        //        _dbmanager.CreateParameters(1);
        //        _dbmanager.AddParameters(0, "@tukhoa", tukhoa);
        //        reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getKhachHang");
        //        while (reader.Read())
        //            khDTO = createKhachHangFromReader(reader);

        //    }
        //    catch (Exception ex)
        //    {

        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //        if (reader != null)
        //            reader.Close();
        //        _dbmanager.Close();
        //    }

        //    return khDTO;
        //}

        // đăng nhập
        //public KhachHangDTO dangNhap(KhachHangDTO khDTO)
        //{
        //    KhachHangDTO kh = new KhachHangDTO();
        //    IDataReader reader = null;
        //    try
        //    {
        //        _dbmanager.Open();
        //        _dbmanager.CreateParameters(2);
        //        _dbmanager.AddParameters(0, "@tendangnhap", khDTO.TenDangNhap);
        //        _dbmanager.AddParameters(1, "@matkhau", khDTO.MatKhau);
        //        reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_dangNhap");
        //        while (reader.Read())
        //        {
        //            kh = createKhachHangFromReader(reader);
        //        }
        //    }
        //    catch (Exception ex)
        //    {

        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //        if (reader != null)
        //            reader.Close();
        //        _dbmanager.Close();
        //    }
        //    return kh;
        //}

        ///// <summary>
        ///// Phương thức đăng ký tài khoản khách hàng
        ///// </summary>
        ///// <param name="kh">KhachHangDTO</param>
        ///// <returns>int</returns>
        //public int dangKy(KhachHangDTO kh)
        //{
        //    int rs = -1;
        //    try
        //    {
        //        _dbmanager.Open();
        //        _dbmanager.CreateParameters(11);
        //        _dbmanager.AddParameters(0, "@ma_kh", kh.MaKhachHang);
        //        _dbmanager.AddParameters(1, "@ten_kh", kh.HoTen);
        //        _dbmanager.AddParameters(2, "@ten_dn", kh.TenDangNhap);
        //        _dbmanager.AddParameters(3, "@matkhau", kh.MatKhau);
        //        _dbmanager.AddParameters(4, "@gioitinh", kh.GioiTinh);
        //        _dbmanager.AddParameters(5, "@diachi", kh.DiaChi);
        //        _dbmanager.AddParameters(6, "@email", kh.Email);
        //        _dbmanager.AddParameters(7, "@cmnd", kh.CMND);
        //        _dbmanager.AddParameters(8, "@dienthoai", kh.DienThoai);
        //        _dbmanager.AddParameters(9, "@makichhoat", kh.MaKichHoat);
        //        _dbmanager.AddParameters(10, "@tinhtrang", kh.TinhTrang);

        //        rs = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemKhachHang");
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //        if (_dbmanager.Connection.State == ConnectionState.Open)
        //            _dbmanager.Close();
        //    }
        //    return rs;
        //}

        ///// <summary>
        ///// Phương thức xóa khách hàng
        ///// </summary>
        ///// <param name="kh"></param>
        ///// <returns></returns>
        //public int Xoa(KhachHangDTO kh)
        //{
        //    int index = -1;
        //    try
        //    {
        //        // Mở kết nối
        //        _dbmanager.Open();

        //        // Thực thi câu truy vấn
        //        _dbmanager.CreateParameters(1);
        //        _dbmanager.AddParameters(0, "@ma_kh", kh.MaKhachHang);
        //        index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_XoaKhachHang");
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //        if (_dbmanager.Connection.State == ConnectionState.Open)
        //            _dbmanager.Close();
        //    }
        //    return index;

        //}

        ///// <summary>
        ///// Phương thức kiểm khách hàng nhập mật cũ có đúng ko?
        ///// </summary>
        ///// <param name="kh">KhachHangDTO</param>
        ///// <returns>string</returns>
        //public string ktNhapMatKhauCu(KhachHangDTO kh)
        //{
        //    string index = null;
        //    try
        //    {
        //        // Mở kết nối
        //        _dbmanager.Open();

        //        // Thực thi câu truy vấn
        //        _dbmanager.CreateParameters(1);
        //        _dbmanager.AddParameters(0, "@ma_kh", kh.MaKhachHang);
        //        index = _dbmanager.ExecuteScalar(CommandType.StoredProcedure, "usp_ktMatKhauCuKhachHang").ToString();
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //        if (_dbmanager.Connection.State == ConnectionState.Open)
        //            _dbmanager.Close();
        //    }
        //    return index;

        //}
        #endregion

        #region Phương thức lấy danh sách khách hàng
        /// <summary>
        /// Phương thức lấy danh sách khách hàng
        /// </summary>
        /// <returns>List</returns>
        public List<KhachHangDTO> GetListKhachHang()
        {
            List<KhachHangDTO> _lstDTO = new List<KhachHangDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListKhachHang");
                while (_reader.Read())
                    _lstDTO.Add(this.CreateKhachHangFromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lstDTO;

        }
        #endregion

        #region Phương thức GetKhachHangTheoEmail
        /// <summary>
        /// Phương thức GetKhachHangTheoEmail
        /// </summary>
        /// <param name="email">string</param>
        /// <returns>KhachHangDTO</returns>
        public KhachHangDTO GetKhachHangTheoEmail(string email)
        {
            KhachHangDTO _khDTO = new KhachHangDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@email", email);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getKhachHangTheoEmail");
                while (_reader.Read())
                    _khDTO = this.CreateKhachHangFromReader(_reader);

            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
                _dbmanager.Close();
            }

            return _khDTO;
        }
        #endregion

        #region Phương thức GetKhachHangTheoEmail
        ///// <summary>
        ///// Phương thức GetKhachHangTheoEmail
        ///// </summary>
        ///// <param name="email">string</param>
        ///// <returns>KhachHangDTO</returns>
        //public KhachHangDTO GetKhachHangTheoEmail(string email)
        //{
        //    KhachHangDTO _khDTO = new KhachHangDTO();
        //    IDataReader _reader = null;
        //    try
        //    {
        //        _dbmanager.Open();
        //        _dbmanager.CreateParameters(1);
        //        _dbmanager.AddParameters(0, "@email", email);
        //        _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getKhachHangTheoEmail");
        //        while (_reader.Read())
        //            _khDTO = this.CreateKhachHangFromReader(_reader);

        //    }
        //    catch (Exception ex)
        //    {

        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //        if (_reader != null)
        //        {
        //            _reader.Close();
        //            _dbmanager.Close();
        //        }
        //    }

        //    return _khDTO;
        //}
        #endregion

        #region Phương thức GetKhachHang
        /// <summary>
        /// Phương thức GetKhachHang
        /// </summary>
        /// <param name="makh">string</param>
        /// <returns><KhachHangDTO/returns>
        public KhachHangDTO GetKhachHang(string makh)
        {
            KhachHangDTO _khDTO = new KhachHangDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@tukhoa", makh);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getKhachHang");
                while (_reader.Read())
                    _khDTO = this.CreateKhachHangFromReader(_reader);

            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
                _dbmanager.Close();
            }

            return _khDTO;
        }
        #endregion

        #region Phương thức sửa thông tin khách hàng
        /// <summary>
        /// Phương thức sửa thông tin khách hàng
        /// </summary>
        /// <param name="kh">KhachHangDTO</param>
        /// <returns>int</returns>
        public int Sua(KhachHangDTO kh)
        {

            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(10);
                _dbmanager.AddParameters(0, "@ma_kh", kh.MaKhachHang);
                _dbmanager.AddParameters(1, "@ten_kh", kh.TenKhachHang);
                _dbmanager.AddParameters(2, "@gioitinh", kh.GioiTinh);
                _dbmanager.AddParameters(3, "@diachi", kh.DiaChi);
                _dbmanager.AddParameters(4, "@email", kh.Email);
                _dbmanager.AddParameters(5, "@cmnd", kh.CMND);
                _dbmanager.AddParameters(6, "@dienthoai", kh.DienThoai);
                _dbmanager.AddParameters(7, "@quyen", kh.Quyen);
                _dbmanager.AddParameters(8, "@token", kh.Token);
                _dbmanager.AddParameters(9, "@tinhtrang", kh.TinhTrang);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_CapNhatKhachHang");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;

        }
        #endregion

        #region Phương thức thêm thông tin khách hàng
        /// <summary>
        /// Phương thức thêm thông tin khách hàng
        /// </summary>
        /// <param name="kh">KhachHangDTO</param>
        /// <returns>int</returns>
        public int Them(KhachHangDTO kh)
        {

            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(10);
                _dbmanager.AddParameters(0, "@ma_kh", kh.MaKhachHang);
                _dbmanager.AddParameters(1, "@ten_kh", kh.TenKhachHang);
                _dbmanager.AddParameters(2, "@gioitinh", kh.GioiTinh);
                _dbmanager.AddParameters(3, "@diachi", kh.DiaChi);
                _dbmanager.AddParameters(4, "@email", kh.Email);
                _dbmanager.AddParameters(5, "@cmnd", kh.CMND);
                _dbmanager.AddParameters(6, "@dienthoai", kh.DienThoai);
                _dbmanager.AddParameters(7, "@quyen", kh.Quyen);
                _dbmanager.AddParameters(8, "@token", kh.Token);
                _dbmanager.AddParameters(9, "@tinhtrang", kh.TinhTrang);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemKhachHang");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;

        }
        #endregion
    }
}